package com.credit.xzgl.service.impl;

import java.util.Date;
import java.util.List;

import com.credit.common.core.domain.entity.SysDictData;
import com.credit.common.core.domain.entity.SysUser;
import com.credit.common.exception.ServiceException;
import com.credit.common.utils.DictUtils;
import com.credit.common.utils.StringUtils;
import com.credit.common.utils.uuid.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.credit.xzgl.mapper.CreditJdjcMapper;
import com.credit.xzgl.domain.CreditJdjc;
import com.credit.xzgl.service.ICreditJdjcService;

/**
 * 监督检查Service业务层处理
 * 
 * @author credit
 * @date 2025-03-22
 */
@Service
public class CreditJdjcServiceImpl implements ICreditJdjcService 
{
    @Autowired
    private CreditJdjcMapper creditJdjcMapper;

    /**
     * 查询监督检查
     * 
     * @param id 监督检查主键
     * @return 监督检查
     */
    @Override
    public CreditJdjc selectCreditJdjcById(String id)
    {
        return creditJdjcMapper.selectCreditJdjcById(id);
    }

    /**
     * 查询监督检查列表
     * 
     * @param creditJdjc 监督检查
     * @return 监督检查
     */
    @Override
    public List<CreditJdjc> selectCreditJdjcList(CreditJdjc creditJdjc)
    {
        return creditJdjcMapper.selectCreditJdjcList(creditJdjc);
    }

    /**
     * 新增监督检查
     * 
     * @param creditJdjc 监督检查
     * @return 结果
     */
    @Override
    public int insertCreditJdjc(CreditJdjc creditJdjc)
    {
        creditJdjc.setCreateBy("");
        creditJdjc.setCreateTime(new Date());
        creditJdjc.setId(UUID.randomUUID().toString().replaceAll("-",""));
        return creditJdjcMapper.insertCreditJdjc(creditJdjc);
    }

    /**
     * 修改监督检查
     * 
     * @param creditJdjc 监督检查
     * @return 结果
     */
    @Override
    public int updateCreditJdjc(CreditJdjc creditJdjc)
    {
        return creditJdjcMapper.updateCreditJdjc(creditJdjc);
    }

    /**
     * 批量删除监督检查
     * 
     * @param ids 需要删除的监督检查主键
     * @return 结果
     */
    @Override
    public int deleteCreditJdjcByIds(String[] ids)
    {
        return creditJdjcMapper.deleteCreditJdjcByIds(ids);
    }

    /**
     * 删除监督检查信息
     * 
     * @param id 监督检查主键
     * @return 结果
     */
    @Override
    public int deleteCreditJdjcById(String id)
    {
        return creditJdjcMapper.deleteCreditJdjcById(id);
    }

    @Override
    public String importData(List<CreditJdjc> jdjcList) {
        if (StringUtils.isNull(jdjcList) || jdjcList.size() == 0)
        {
            throw new ServiceException("导入数据不能为空！");
        }
        int failureNum = 0;
        StringBuilder failureMsg = new StringBuilder();
        int i =0;
        for (CreditJdjc jdjc : jdjcList){
            i++;
            jdjc.setId(UUID.randomUUID().toString().replaceAll("-",""));
            if(!StringUtils.isNotEmpty(jdjc.getJdjcnr())){
                failureMsg.append("第"+i+"行数据 监督检查内容 不能为空;");
                failureNum++;
                continue;
            }
            if(!StringUtils.isNotEmpty(jdjc.getJdjcjgdm())){
                failureMsg.append("第"+i+"行数据 监督检查机关代码 不能为空;");
                failureNum++;
                continue;
            }
            if(!StringUtils.isNotEmpty(jdjc.getSjlydwmc())){
                failureMsg.append("第"+i+"行数据 数据来源单位名称 不能为空;");
                failureNum++;
                continue;
            }
            if(!StringUtils.isNotEmpty(jdjc.getSjlydwdm())){
                failureMsg.append("第"+i+"行数据 数据来源单位代码 不能为空;");
                failureNum++;
                continue;
            }
            if(!StringUtils.isNotEmpty(jdjc.getGxsx())){
                failureMsg.append("第"+i+"行数据 共享属性 不能为空;");
                failureNum++;
                continue;
            }

            if(!StringUtils.isNotEmpty(jdjc.getXzxdrlb())){
                jdjc.setXzxdrlb(DictUtils.getDictValue("dict_credit_xzxdrlb",jdjc.getXzxdrlb()));
                if(StringUtils.isEmpty(jdjc.getXzxdrlb())){
                    failureMsg.append("第"+i+"行数据 行政相对人类别 值不在字典内;");
                    failureNum++;
                    continue;
                }
            }
            if(!StringUtils.isNotEmpty(jdjc.getFddbrzjlx())){
                jdjc.setFddbrzjlx(DictUtils.getDictValue("dict_credit_fddbrzjlx",jdjc.getFddbrzjlx()));
                if(StringUtils.isEmpty(jdjc.getFddbrzjlx())){
                    failureMsg.append("第"+i+"行数据 法定代表人证件类型 值不在字典内;");
                    failureNum++;
                    continue;
                }
            }
            if(!StringUtils.isNotEmpty(jdjc.getJcxs())){
                jdjc.setJcxs(DictUtils.getDictValue("dict_credit_jcxs",jdjc.getJcxs()));
                if(StringUtils.isEmpty(jdjc.getJcxs())){
                    failureMsg.append("第"+i+"行数据 检查形式 值不在字典内;");
                    failureNum++;
                    continue;
                }
            }
            if(!StringUtils.isNotEmpty(jdjc.getJcfs())){
                jdjc.setJcfs(DictUtils.getDictValue("dict_credit_jcfs",jdjc.getJcfs()));
                if(StringUtils.isEmpty(jdjc.getJcfs())){
                    failureMsg.append("第"+i+"行数据 检查方式 值不在字典内;");
                    failureNum++;
                    continue;
                }
            }
            if(!StringUtils.isNotEmpty(jdjc.getGxsx())){
                jdjc.setGxsx(DictUtils.getDictValue("dict_credit_gxsx",jdjc.getGxsx()));
                if(StringUtils.isEmpty(jdjc.getGxsx())){
                    failureMsg.append("第"+i+"行数据 共享属性 值不在字典内;");
                    failureNum++;
                    continue;
                }
            }
            jdjc.setCreateTime(new Date());
        }

        if(failureNum>0){
            return failureMsg.toString();
        }
        int a = creditJdjcMapper.batchSave(jdjcList);
        return "导入成功"+a+"条";
    }

    public Boolean checkVerifyDcit(String dictType,String dictLabel){
        List<SysDictData> datas =DictUtils.getDictCache(dictType);
        for(SysDictData dict :datas){
            if(dict.getDictLabel().equals(dictLabel)){
                return true;
            }
        }
        return false;
    }
}
